﻿// Face The Right Way POJ - 3276.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <cstring>
#include <string>


using namespace std;

//https://vjudge.csgrandeur.cn/problem/POJ-3276

/*
农场主约翰把他的 N（1 ≤ N ≤ 5000）头奶牛排成一排，许多奶牛都面朝前方，就像好牛一样。
但也有一些奶牛朝后，他需要所有奶牛都朝前，这样他的生活才会完美。

幸运的是，FJ 最近买了一台自动翻牛机。由于他买的是打折机型，所以必须不可更改地预设为一次可以转动 K（1 ≤ K ≤ N）头奶牛，
而且只能转动排成一排、挨在一起的奶牛。每次使用该机器时，它都会将队列中连续的 K 头奶牛的朝向反转（不能对少于 K 头奶牛使用，
例如在奶牛队列的两端）。每头奶牛的*位置*与之前相同，但最终朝向*相反的方向*。开始时朝向前方的奶牛会被机器转向后方，反之亦然。

由于 FJ 必须选择一个不变的 K 值，因此请帮助他确定 K 的最小值，使机器让所有奶牛朝前所需的操作次数最少。
同时确定 M，即使用该 K 值使所有奶牛面向前方所需的最少机器操作次数。

输入
第 1 行 一个整数： N
第 2...N+1 行： 第 i+1 行包含一个字符 F 或 B，表示奶牛 i 是朝前还是朝后。
输出
第 1 行： 两个空格分隔的整数： K 和 M

in
7
B
B
F
B
F
B
B

out 
3 3

*/


const int N = 5010;
int arr[N];
int n, k,m;
void solveInner(int range) {
	int sum = 0;  int cnt = 0;
	int f[N]; memset(f, 0, sizeof f);
	int cpy[N]; memcpy(cpy, arr, sizeof arr);
	for (int i = 0; i < n-range+1; i++) {
		if (sum %2 == 1) {
			//根据之前的点击 计算当前的状态
			cpy[i] ^= 1;
		}
		if (cpy[i] == 1) {
			//当前翻转 则点击
			cnt++;
			f[i] = 1;
			sum += f[i];
		}
		if (i - range+1 >= 0) {
			sum -= f[i - range + 1];
		}
	}

	for (int i = n - range + 1; i < n; i++) {
		if (sum%2 == 1) {
			//根据之前的点击 计算当前的状态
			cpy[i] ^= 1;
		}
		if (cpy[i] == 1) {
			cnt = 0x3f3f3f3f; break;
		}
		if (i - range + 1 >= 0) {
			sum -= f[i - range + 1];
		}
	}

	if (cnt < m) {
		m = cnt;
		k = range;
	}
}


void solve() {
	k = m = 0x3f3f3f3f;

	for (int j = 1; j <= n; j++) {
		solveInner(j);
	}
}


int main()
{
	cin >> n;
	for (int i = 0; i < n; i++) {
		string str;
		cin >> str;
		if (str[0] == 'F') {
			arr[i] = 0;
		}
		else {
			arr[i] = 1;
		}
	}
	
	solve();

	cout << k << " " << m << endl;

	return 0;
}

 